package Colonia;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import Clases.*;


public class Solucion implements Comparable<Solucion>
{
	private List<Usuario> usuarios;
	private Map<Tarea,Usuario> asignacion;
	
	public Solucion(List<Usuario> usuarios)
	{
		this.usuarios = usuarios;
		asignacion = new HashMap<Tarea,Usuario>();
	}

	public Map<Tarea,Usuario> getAsignacion() 
	{
		return asignacion;
	}

	public int getSuma()
	{
		Map<Usuario,Integer> resumen = new HashMap<Usuario,Integer>();
		for(Usuario usuario : usuarios)
		{
			resumen.put(usuario,usuario.getDisponibilidad());
		}
		for(Usuario usuario : asignacion.values())
		{
			Integer disp = resumen.get(usuario);
			if(disp != null)
			{
				disp--;
				resumen.put(usuario,disp);
			}
		}
		int ret = 0;
		
		for(Usuario usuario1 : usuarios)
		{
			for(Usuario usuario2 : usuarios)
			{
				Integer disp1 = resumen.get(usuario1);
				Integer disp2 = resumen.get(usuario2);
				ret += Math.abs(disp1 - disp2);
			}
		}
		
		return ret;
	}
	
	public int compareTo(Solucion otra) 
	{
		return this.getSuma() - otra.getSuma();
	}

	public void add(Tarea tarea, Usuario usuario) 
	{
		this.asignacion.put(tarea, usuario);
	}
	
	public String toString()
	{
		return this.asignacion.toString();
	}
}
